/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Controlador;

import Modelo.Entidades.Alumno;
import Modelo.Entidades.RespuestaContestada;
import Modelo.Entidades.Tarea;
import Modelo.Entidades.TareaRealizada;
import Modelo.Entidades.TareaRealizadaImpl;
import Modelo.TareaRealizadaModel;
import Vista.TareaRealizada.TareaRealizadaView;
import java.io.Serializable;
import java.sql.Time;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/*
 *  Proyecto eJAM [G12]
 *  Miembros:
 *      - Javier Ruiz Hidalgo
 *      - Adrian Ramos Cápitas
 *      - Miguel Alejandro Esteban Ordóñez
 */

public class TareaRealizadaControllerImpl extends AbstractControllerImpl<TareaRealizadaModel, TareaRealizadaView, Serializable> implements TareaRealizadaController{

    public void borraEntidadGesture(String DNI, String nombre) {
        TareaRealizada tareaRealizada = generaEntidad(DNI, nombre);
        getModel().eliminarEntidad(tareaRealizada);
    }

    protected TareaRealizada generaEntidad(List<Serializable> datos) {
        List<RespuestaContestada> respuestasContestadas = new ArrayList();

        Alumno alumno = (Alumno)datos.get(0);
        Tarea tarea = (Tarea)datos.get(1);
        Time duracion = (Time)datos.get(2);
        Date f_realizacion = (Date)datos.get(3);
        double nota = (Double)datos.get(4);

        if((List<RespuestaContestada>)datos.get(5) != null){
            respuestasContestadas.addAll((List<RespuestaContestada>)datos.get(5));
        }

        Time t = new Time(tarea.getDuracion().getTime() - duracion.getTime());

        TareaRealizada tr = new TareaRealizadaImpl(alumno, tarea, t, f_realizacion, nota, respuestasContestadas);
        tr.corregirTareaEvaluable();
        
        this.comunicaNota(tr.getNota());

        return tr;
    }

    protected TareaRealizada generaEntidad(Serializable pk1) { 
        //Metodo no contemplado
        return null;
    }

    public TareaRealizada generaEntidad(String pk1, String pk2) {
        return new TareaRealizadaImpl((Alumno)new UsuarioControllerImpl().generaEntidad(pk1), new TareaControllerImpl().generaEntidad(pk2));
    }

    private void comunicaNota(double nota){
        List<TareaRealizadaView> vistas = super.getViews();

        for(TareaRealizadaView trv: vistas){
            trv.comunicaNota(nota);
        }
    }

}
